using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos;
using Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.ServiceImplementation.Translator;

namespace Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.ServiceImplementation
{
    /// <summary>
    /// Classe de implementacao de contrato de servico "Artigo".
    /// </summary>
    [ServiceBehavior(Name = "Artigo", Namespace = "http://www.bovespa.com.br/Artigo/ServiceContracts/2010/08")]
    public class Artigo : Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.IArtigo
    {
        #region IArtigo Members

        /// <summary>
        /// Recupera uma lista de entidades de negocio "Artigo".
        /// </summary>
        /// <returns></returns>
        public List<Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.Artigo> ConsultarArtigo()
        {
            Negocio.Artigo negocio = new Negocio.Artigo();
            return new TradutorArtigo().Traduzir(negocio.ConsultarArtigo());
        }

        /// <summary>
        /// Recupera uma entidade de negocio "Artigo".
        /// </summary>
        /// <returns></returns>
        public Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.Artigo ObterArtigo(int entrada)
        {
            Negocio.Artigo negocio = new Negocio.Artigo();
            return new TradutorArtigo().Traduzir(negocio.ObterArtigo(entrada));
        }

        /// <summary>
        /// Persiste uma entidade de negocio "Artigo".
        /// </summary>
        /// <param name="entrada"></param>
        public void InserirArtigo(Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.Artigo entrada)
        {
            Negocio.Artigo negocio = new Negocio.Artigo();
            negocio.InserirArtigo(new TradutorArtigo().Traduzir(entrada));
        }

        /// <summary>
        /// Remove uma entidade de negocio "Artigo".
        /// </summary>
        /// <param name="entrada"></param>
        public void ExcluirArtigo(int entrada)
        {
            Negocio.Artigo negocio = new Negocio.Artigo();
            negocio.ExcluirArtigo(entrada);
        }

        /// <summary>
        /// Atualiza uma entidade de negocio "Artigo".
        /// </summary>
        /// <param name="entrada"></param>
        public void AtualizarArtigo(Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.Artigo entrada)
        {
            Negocio.Artigo negocio = new Negocio.Artigo();
            negocio.AtualizarArtigo(new TradutorArtigo().Traduzir(entrada));
        }

        /// <summary>
        /// Persiste palavras chaves e as relaciona com os artigos.
        /// </summary>
        /// <param name="entrada"></param>
        public void InserirPalavraChave(Bovespa.Sinacor.Servico.BaseConhecimento.Artigo.Servicos.Contratos.PalavraChave entrada)
        {
            Negocio.Artigo negocio = new Negocio.Artigo();
            negocio.InserirPalavraChave(new TradutorPalavraChave().Traduzir(entrada));
        }

        /// <summary>
        /// Realiza uma pesquisa por termo de artigos
        /// </summary>
        /// <param name="termo"></param>
        /// <param name="pagina"></param>
        /// <param name="qtdPagina"></param>
        /// <returns></returns>
        public ResultadoBuscaArtigo RetornarListaArtigos(string termo, int pagina, int qtdPagina)
        {
            Negocio.Artigo negocio = new Negocio.Artigo();
            return new TradutorResultadoBuscaArtigo().Traduzir(negocio.RetornarListaArtigos(termo, pagina, qtdPagina));
        }

        #endregion
    }
}
